package com.scott.observer.lesson01;

import java.util.ArrayList;
import java.util.List;

/**
 * Subject 目标对象   
 * 
 * Subject完成目标对象的公共方法  没有任何和业务相关的东西
 * 而ConcreteSubject 具体目标对象 封装具体的业务方法
 */
public class Subject {
	
	
	
	//用来保存观察者列表    这个列表是可以变化的    包含增加观察者和删除观察者
	private List<Observer> list = new ArrayList<Observer>();
	
	//增加观察者
	public void add(Observer observer){
		list.add(observer);
	}
	
	//删除观察者
	public void delete(Observer observer){
		list.remove(observer);
	}
	
	
	//给所有的观察者发生1个通知
	protected void notifyAllObservers(){
		
		for(Observer o : list){
			
			//观察者自己更新
			o.update(this);
		}
	}

}
